package com.atguigu.stgy.model.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class BaseEntity implements Serializable {

    @Schema(description = "主键")
    /*
        功能解释：
        @TableId：声明该字段为数据库表的主键
        value = "id"：指定数据库表中对应的主键列名为"id"
        type = IdType.AUTO：设置主键生成策略为自动递增（数据库自增）
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @Schema(description = "创建时间")
    /*
        功能解释：
        @TableField：标识数据库字段映射关系
        value = "create_time"：对应数据库表中的create_time字段
        fill = FieldFill.INSERT：指定字段填充策略为插入时自动填充
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonIgnore // 忽略被标注的字段或方法
    private Date createTime;

    @Schema(description = "更新时间")
    /*
        功能解释：
        @TableField：标记实体类属性与数据库字段的映射关系
        value = "update_time"：指定对应的数据库字段名为"update_time"
        fill = FieldFill.UPDATE：设置字段填充策略为更新时自动填充，即每次更新记录时会自动设置该字段值
        主要用于实现数据库记录的自动更新时间戳功能。
     */
    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    @JsonIgnore // 忽略被标注的字段或方法
    private Date updateTime;

    @Schema(description = "逻辑删除")
    @TableField("is_deleted")
    @TableLogic // 逻辑删除
    @JsonIgnore // 忽略被标注的字段或方法
    private Byte isDeleted;

}